static void vga_save(QEMUFile *f, void *opaque)
{
VGAState *s = opaque;
+ unsigned save_format_flags;
+ uint32_t vram_size;
#ifdef CONFIG_BOCHS_VBE
int i;
#endif
qemu_put_buffer(f, s->palette, 768);
qemu_put_be32s(f, &s->bank_offset);
+ save_format_flags = VGA_SAVE_FORMAT_FLAG_VRAM_DATA;
#ifdef CONFIG_BOCHS_VBE
- qemu_put_byte(f, 1);
+ qemu_put_byte(f, save_format_flags | VGA_SAVE_FORMAT_FLAG_BOCHS_VBE);
qemu_put_be16s(f, &s->vbe_index);
for(i = 0; i < VBE_DISPI_INDEX_NB; i++)
qemu_put_be16s(f, &s->vbe_regs[i]);
qemu_put_be32s(f, &s->vbe_line_offset);
qemu_put_be32s(f, &s->vbe_bank_mask);
#else
- qemu_put_byte(f, 0);
+ qemu_put_byte(f, save_format_flags);
#endif
+ vram_size = s->vram_size;
+ qemu_put_be32s(f, &vram_size);
+ qemu_put_buffer(f, s->vram_ptr, s->vram_size);
}
static int vga_load(QEMUFile *f, void *opaque, int version_id)
{
VGAState *s = opaque;
- int is_vbe, ret;
-#ifdef CONFIG_BOCHS_VBE
- int i;
-#endif
+ int ret;
+ unsigned int save_format_flags;
+ uint32_t vram_size;
if (version_id > 2)
return -EINVAL;
qemu_get_buffer(f, s->palette, 768);
qemu_get_be32s(f, &s->bank_offset);
- is_vbe = qemu_get_byte(f);
+ save_format_flags = qemu_get_byte(f);
#ifdef CONFIG_BOCHS_VBE
- if (!is_vbe)
+ if (!(save_format_flags & VGA_SAVE_FORMAT_FLAG_BOCHS_VBE))
return -EINVAL;
qemu_get_be16s(f, &s->vbe_index);
for(i = 0; i < VBE_DISPI_INDEX_NB; i++)
qemu_get_be32s(f, &s->vbe_line_offset);
qemu_get_be32s(f, &s->vbe_bank_mask);
#else
- if (is_vbe)
+ if (save_format_flags & VGA_SAVE_FORMAT_FLAG_BOCHS_VBE)
return -EINVAL;
#endif
+ if (save_format_flags & VGA_SAVE_FORMAT_FLAG_VRAM_DATA) {
+ /* people who restore old images may be lucky ... */
+ qemu_get_be32s(f, &vram_size);
+ if (vram_size != s->vram_size)
+ return -EINVAL;
+ qemu_get_buffer(f, s->vram_ptr, s->vram_size);
+ }
/* force refresh */
s->graphic_mode = -1;
return (v << 2) | (b << 1) | b;
}
+#define VGA_SAVE_FORMAT_FLAG_BOCHS_VBE 0x01
+#define VGA_SAVE_FORMAT_FLAG_VRAM_DATA 0x02
+
void vga_common_init(VGAState *s, DisplayState *ds, uint8_t *vga_ram_base,
unsigned long vga_ram_offset, int vga_ram_size);
uint32_t vga_mem_readb(void *opaque, target_phys_addr_t addr);